package cn.set;

import cn.list.LinkedList;
import cn.list.List;

/**
 * @author Mxb
 * @version 1.0
 * @date 2020/4/9 14:54
 */
public class ListSet<E> implements Set<E> {
    //调用自己手写的 list
    private List<E> list = new LinkedList<>();


    @Override
    public int size() {
        return list.size();
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }

    @Override
    public void clear() {
        list.clear();
    }

    @Override
    public boolean contains(E element) {
        return list.contains(element);
    }

    /**
     * 添加
     * @param element
     */
    @Override
    public void add(E element) {
        //集合支持空 自己处理

        //不能存放重复元素 直接返回
        if (list.contains(element)) return;
        list.add(element);
        //覆盖
        //int i = list.indexOf(element);
        //if(i != List.ELEMENT_NOT_FOUND){
        //    list.set(i,element);
        //}else{
        //  list.add(element);
        // }
    }

    /**
     * 移除元素
     * @param element
     */
    @Override
    public void remove(E element) {
        //先找到 元素对应的索引
        int i = list.indexOf(element);
        if (i != List.ELEMENT_NOT_FOUND) {
            list.remove(i);
        }
    }

    /**
     * 遍历元素
     * @param visitor
     */
    @Override
    public void traversal(Visitor visitor) {
        if (visitor == null) return;
        for (int i = 0; i < list.size(); i++) {

            if (visitor.visit(list.get(i))) return;
        }
    }
}
